iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
自我挑戰組

30天從0開始的NCPC之旅系列 第 10

[Day 10] UVA10093 & UVA11349 & UVA10062

  • 分享至 

  • xImage
  •  

UVA10093

點我看UVA10093

解題思路

只要把每個字母或符號以鍵盤上它左邊第二個鍵的符號來取代就行了。
空白和換行請直接輸出。
1.先建立對比用字串
2.輸入字串
3.先將大寫轉小寫
4.再逐一與比對用字串作轉換(空白直接輸出)
5.輸出

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string c=" `1234567890-=qwertyuiop[]asdfghjkl;'zxcvbnm,./";
    //建立比對用的字串,先按空白鍵,之後從鍵盤左邊按到右邊就對了。
    string s;//要輸入的字串
    while(getline(cin,s))//輸入
    {
        
        for(int i=0;i<s.length();i++)//開始一個一個比對
        {
            if(s[i]>='A'&&s[i]<='Z')
            {
                s[i]=s[i]+32; //先將大寫換成小寫
            }
            
            for(int t=0;t<c.length();t++)//逐一與比對用字串比對
            {
                if(s[i]==c[0])//空白鍵不用轉換
                {
                    cout<<" ";
                    break;
                }
                
                else if(s[i]==c[t])
                {
                    cout<<c[t-2];//輸出左邊兩個鍵盤的字
                    break;
                }
            }
        }
        cout<<endl;
    }
    return 0;
}

UVA11349

點我看UVA11349

#include <iostream>

using namespace std;

int main(){
	int n;
	int count=1;
	cin>>n;
	while(n--){
		int d;
		string tmp1,tmp2;
		scanf("%s%s%d",tmp1,tmp2,&d);
		bool sy;
		
		
		int a[d][d]={0},num;
		for(int i=0;i<d;i++){
			for(int k=0;k<d;k++){
				cin>>num;
				a[i][k]=num;
			}
		}
		
		for(int i=0;i<d;i++){
			for(int k=0;k<d;k++){
				if(i==d-2&&k==d-2)continue;
				else if(a[k][i]!=a[d-1-k][d-1-i]||a[k][i]<0){
			 		sy=false;	
			 		break;
				}else sy=true;
			}
		}
	
		if(sy)cout<<"Test #"<<count<<": Symmetric."<<endl;
		else cout<<"Test #"<<count<<": Non-symmetric."<<endl; 
		count++;
	}

}

UVA10062

點我看10062

#include<iostream>
#include<string>

using namespace std;

int main() {
 string str;

 while (getline(cin, str)) { //ㄏㄏ有空格
  int acs[127] = { 0 }, acsii[127] = { 0 }, sort[94] = { 0 }, l = 0, tmp;

  for (int i = 0; i < str.length(); i++) {
   acs[(int)str[i]] += 1; //(int)str[i] 為 acsii code
  }

  for (int j = 32; j <= 126; j++) {
   if (acs[j] > 0) {
    sort[l] = acs[j];
    l++;
   }
  }

  //將次數由小排到大
  for (int i = 0; i < l - 1; i++) { //因為有j+1的問題,index error所以,所需檢查的陣列會減一 
   for (int j = 0; j < l - 1 - i; j++) { //美交換一次,所需檢查的陣列會減一 
    if (sort[j] > sort[j + 1]) {
     tmp = sort[j]; //大的放暫時變數 
     sort[j] = sort[j + 1];  //小的放進前一個
     sort[j + 1] = tmp; //大的放進後一個,交換
    }
   }
  }

  //印由少到多的ACSII
  for (int i = 0; i < l; i++) {
   for (int j = 126; j >= 32; j--) { //如果有2個以上的字元有相同的次數,則ASCII值較大的先輸出,所以倒推回去
    if (sort[i] == acs[j]) {
     cout << j << " " << sort[i] << endl;
     acs[j] = 0; //避免讀取到已印出次數的ACSII
     break;
    }
   }
  }
 }
}

上一篇
[Day 09] UVA10222&UVA10093
下一篇
[Day 11] UVA10268 & UVA10931
系列文
30天從0開始的NCPC之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言